package com.lsl.proxy_pattern.staticproxy;

import com.lsl.proxy_pattern.staticproxy.proxy.Proxy;

/**
 * 代理类和委托类有同样的接口
 * 代理类主要负责为委托类预处理消息、过滤消息以及事后处理消息等
 * <p>
 * 代理模式最主要的就是有一个公共接口（IGiveGift），
 * 一个具体的类（Pursuit 张三），一个代理类（Proxy 班长），
 * 代理类持有具体类的实例，代为执行具体类实例方法。
 * 上面说到，代理模式就是在访问实际对象时引入一定程度的间接性，
 * 因为这种间接性，可以附加多种用途。这里的间接性就是指不直接调用实际对象的方法，
 * 那么我们在代理过程中就可以加上一些其他用途。就这个例子来说，加入班长在帮张三上交班费之前想要先反映一下张三最近学习有很大进步，通过代理模式很轻松就能办到
 * <p>
 * <p>
 * 最直白的就是在Spring中的面向切面编程（AOP），
 * 我们能在一个切点之前执行一些操作，在一个切点之后执行一些操作，
 * 这个切点就是一个个方法。这些方法所在类肯定就是被代理了，在代理过程中切入了一些其他操作。
 * 其实也是切面思想的主要思路
 *
 * @author liusl104
 */
public class Test {
    public static void main(String[] args) {
        Proxy proxy = new Proxy();
        proxy.giveChocolate();
        proxy.giveDolls();
        proxy.giveFlowers();
    }
}
